python函数参数,序列解包

您所在的位置:网站首页 python 位置参数和序列参数 python函数参数,序列解包

python函数参数,序列解包

2024-07-14 20:43| 来源: 网络整理| 查看: 265

传递参数是的序列解包

序列解包是非常重要且常用的一个功能。

>>> lt = [1,2,3] >>> a, b, c = lt >>> print(a,b,c) 1 2 3 >>> x, y, z = 1, 2, 3 >>> print(x,y,z) 1 2 3 >>> a_tuple=tuple(range(3)) >>> x,y,z = a_tuple >>> print(x,y,z) 0 1 2 >>> x, y, z = map(str, range(3))

在Python列表、元组、集合、字典以及其他可迭代对象,对字典使用时,默认是对字典“键”进行操作,Python解释器将自动进行解包。对“键:值” 对进行操作使用字典的items()方法,对“值”进行操作应使用 values() 方法进行指定。

>>> s = {'a':1,'b':2} >>> a,b = s >>> a 'a' >>> a,b = s.items() >>> b ('b', 2) >>> a,b = s.values() >>> a 1 >>> a,b,c='ABC' >>> a 'A'

特殊用法:

>>> print(*[1,2,3],4,*(5,6)) 1 2 3 4 5 6 >>> *range(3),3 (0, 1, 2, 3) >>> {*range(3),3,4} {0, 1, 2, 3, 4} >>> {'a':1,**{'b':2}} {'a': 1, 'b': 2}

序列解包逆运算

>>> a, *b, c = 1,2,3,4,5 >>> a,b,c (1, [2, 3, 4], 5) >>> a,*b,c=tuple(range(20)) >>> b [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]

传递参数是的序列解包

>>> def demo(a,b,c): ... print(a,b,c) ... >>> seq = [1,2,3] >>> demo(*seq) 1 2 3 >>> seq = {1:'a',2:'b',3:'c'} >>> demo(*seq) 1 2 3 >>> demo(*seq.values()) a b c

如果实参是字典 可以使用两个星号 ** 进行解包,会把字典转换成类似于关键字参数的形式进行参数传递。要求实参字典中的所有键都必须是函数的形参名称,或者于函数中两个星号的可变长度参数相对应。

>>> p = {'a':1,'b':2,'c':3} >>> def f(a,b,c=5): ... print(a,b,c) ... >>> f(**p) 1 2 3 >>> def demo(**p): ... for item in p.items(): ... print(item) ... >>> demo(**p) ('a', 1) ('b', 2) ('c', 3)

一个函数需要以多种新式来接收参数,定义时一般把位置参数放在最前面,然后是默认值参数,接下来是一个星号的可变长度参数,最后两个星号的可变长度参数;调用函数是,一般也按照这个顺序进行参数传递。调用函数时如果对实参使用一个星号* 进行序列解包,那么这些解包后的实参将会被当做普通位置参数对待,并且会在关键参数和使用两个星号** 进行解包的参数之前进行处理。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3